package Num2Rmb;
/**
 * 数字转换为大写人民币计数
 * @author 王代军
 * @since Dec 16,2011
 */
public class Num2Rmb
{
	private String[] hanArr = {"零" , "壹" , "贰" , "叁" , "肆" , 
		"伍" , "陆" , "柒" , "捌" , "玖"};
	private String[] unitArr = {"拾","百","千","万"};

	/**
	 * 把一个四位的数字字符串变成汉字字符串
	 * @param numStr 需要被转换的四位的数字字符串
	 * @return 四位的数字字符串被转换成的汉字字符串。
	 */
	private String toHanStr(String numStr)
	{
		String result = "";
		int numLen = numStr.length();
		//依次遍历数字字符串的每一位数字
		for (int i = 0 ; i < numLen ; i++ )
		{
			//把char型数字转换成的int型数字，因为它们的ASCII码值恰好相差48
			//因此把char型数字减去48得到int型数字，例如'4'被转换成4。
			int num = numStr.charAt(i) - 48;
			//如果不是最后一位数字，而且数字不是零，则需要添加单位（千、百、十）
			if ( i != numLen - 1 && num != 0)
			{
				result += hanArr[num] + unitArr[numLen - 2 - i];
			}
			//否则不要添加单位
			else
			{
				
				//上一个数是否为“零”，不为“零”时就添加
				if(result.length()>0 && hanArr[num].equals("零") && result.charAt(result.length()-1)=='零')
					continue;
				result += hanArr[num];
			}
		}
		//只有个位数，直接返回
		if(result.length()==1)
			return result;
		
		int index=result.length()-1;
		while(result.charAt(index)=='零'){
			index--;
		}
		if(index!=result.length()-1)
			return result.substring(0,index+1);
		else {
			return result;
		}
	}
	/**
	 * 把一个输入的数字字符串变成汉字字符串
	 * @param numStr 需要被转换得到数字字符串
	 * @return 数字字符串被转换成的汉字RMB字符串。
	 */
	private String toRmbStr(String numStr){
		//获取字符串长度
		int numLen = numStr.length();
		//判断长度小于4(一万以内~0-9999) 调用toHanStr(）;
		if(numLen<=4){
		    return toHanStr(numStr);
		}
		//4<长度<=8 (一亿以内 1000-99999999)
		else if(numLen>4&&numLen<=8){
		    String[] subArr={numStr.substring(0, numLen-4),numStr.substring(numLen-4, numLen)};
		    return toHanStr(subArr[0])+"万"+toHanStr(subArr[1]);
		}
		//8<长度<=10 (百亿以内 一亿-9999999999)
		else if(numLen>8&&numLen<=10){
		    String[] subArr={numStr.substring(0,numLen-8),numStr.substring(numLen-8,numLen-4),numStr.substring(numLen-4,numLen)};
		    return toHanStr(subArr[0])+"亿"+toHanStr(subArr[1])+"万"+toHanStr(subArr[2]);
		}
		else return "输入有误！";	
	}          
    public static void main(String[] args) 
    {        
		Num2Rmb nr = new Num2Rmb();
		System.out.println("只支持整数（0~99亿）");
		//测试把一个四位的数字字符串变成汉字字符串
		System.out.println(nr.toRmbStr("1"));
		System.out.println(nr.toRmbStr("10"));
		System.out.println(nr.toRmbStr("15"));
		System.out.println(nr.toRmbStr("110"));
		System.out.println(nr.toRmbStr("123"));
		System.out.println(nr.toRmbStr("105"));
		System.out.println(nr.toRmbStr("1000"));
		System.out.println(nr.toRmbStr("1101"));
		System.out.println(nr.toRmbStr("1110"));
		System.out.println(nr.toRmbStr("1005"));
		System.out.println(nr.toRmbStr("101105"));
		System.out.println(nr.toRmbStr("1011109"));
		System.out.println(nr.toRmbStr("9999999999"));
    }
}
